package com.zmn.plat.business.interfaces.price;

import com.zmn.common.constant.GlobalConsts;
import com.zmn.plat.common.constant.ProductConsts;
import com.zmn.plat.common.dto.price.ItemTo;
import com.zmn.plat.common.dto.price.ProductPriceQuery;
import com.zmn.plat.common.dto.product.item.ItemPriceDRO;
import com.zmn.plat.common.enums.PilotConfigEnum;
import com.zmn.plat.manager.dictionary.ProductDict;
import com.zmn.plat.model.dto.price.PriceCalDTO;
import com.zmn.plat.model.dto.product.ProductRelationDTO;
import com.zmn.plat.model.entity.service.item.ServiceItem;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 描述: 公共服务接口类
 *
 * @author guoqiao
 * @since 2021/8/27 10:58
 */
public interface CommonBService {

    /**
     * 描述: 计算销售价价格和内部价，并设置价格相关的属性
     *
     * @author guoqiao
     * @since 2021/8/27 11:43
     */
    void calPriceDetail(ItemTo itemTo, PriceCalDTO calDTO);

    /**
     * 描述: 查询在途订单的价格表（兼容上线版本，仅限计价器价格表，后续删除）
     *
     * @param relationDTOList 前、后、计价器 产品关系
     * @param channelId       渠道id
     * @param cityId          城市id
     * @param bizType         业务类型
     * @author guoqiao
     * @since 2021/10/20 19:13
     */
    void getTariffByOnOrder(List<ProductRelationDTO> relationDTOList, Integer channelId, Integer cityId, Integer bizType);

    /**
     * 描述: 根据渠道城市查询产品的价格表id和类型（通过校验试点判断价格表优先级，填充进relationDTOList）
     *
     * @param relationDTOList 前、后、计价器 产品关系
     * @param channelId       渠道id
     * @param cityId          城市id
     * @param bizType         业务类型
     * @author guoqiao
     * @since 2021/9/27 11:05
     */
    void getTariffByPilot(List<ProductRelationDTO> relationDTOList, Integer channelId, Integer cityId, Integer bizType);

    /**
     * 描述: 以groupType分组后，优先顺序：3提前付价格表的数据 > 2计价器价格表的数据 > 1服务价格表的数据
     *
     * @param relationDTOList
     * @param groupType 分组类型 2以前台产品分组， 3以计价器产品分组
     * @param flag 是否去除服务价格表
     * @author jiafei
     * @since 2021/9/30 14:54
     */
    void filterTariff(List<ProductRelationDTO> relationDTOList, Integer groupType, Boolean flag);

    /**
     * 描述: 根据条件查询后台产品与价格表Map关系（指定了价格表类型，不校验试点）
     *
     * @param channelId     渠道id
     * @param productIdList 产品id集合
     * @param showType      业务类型
     * @param bizType       业务类型
     * @param tariffType    1 服务价格表 2 计价器价格表 3 提前付价格表
     * @return java.util.HashMap<后台产品id, 价格表id>
     * @author guoqiao
     * @since 2021/8/17 11:48
     */
    Map<Integer, Integer> getTariff(Integer channelId, List<Integer> productIdList, Integer showType, Integer bizType, Integer tariffType);

    /**
     * 描述: 根据产品id、渠道、产品类型、业务类型，校验是否支持计价器（不校验试点）
     *
     * @param channelId 渠道ID
     * @param productId 产品ID
     * @param showType  产品类型
     * @param bizType   业务类型
     * @return java.lang.Boolean
     * @author guoqiao
     * @since 2021/8/30 11:22
     */
    Boolean checkTariff(Integer channelId, Integer productId, Integer showType, Integer bizType);


}
